package main

import (
	"fmt"
	"io/fs"
	"io/ioutil"
	"os"
)

func main() {
	//FileInfo(文件信息)
	stat, err := os.Stat("/Users/Yohann/go/src/golang-study/day9/src/main/person/person.go")
	if err != nil {
		fmt.Println("获取文件状态出错:", err) //获取文件状态出错: stat User: no such file or directory
	} else {
		//文件信息: &{person.go 121 420 {704150232 63784065498 0x113b3a0} {16777221 33188 1 1445000 502 20 0 [0 0 0 0] {1648468699 163499734} {1648468698 704150232} {1648468698 704150232} {1648467059 621564747} 121 8 4096 0 0 0 [0 0]}}
		fmt.Println("文件信息:", stat)
		fmt.Println(stat.IsDir()) //false
	}

	//創建文件夾📂 os.MkdirAll()創建多級目錄
	err = os.Mkdir("test", os.ModePerm)
	if err != nil {
		fmt.Println("創建📂失敗", err)
	}
	info, err := os.Stat("test")
	if err != nil {
		fmt.Println("获取文件状态出错:", err) //創建📂失敗 mkdir test: file exists
	} else {
		//文件信息: &{test 64 2147484141 {879196851 63784068424 0x113d3c0} {16777221 16877 2 1454024 502 20 0 [0 0 0 0] {1648471624 879196851} {1648471624 879196851} {1648471624 879196851} {1648471624 879196851} 64 0 4096 0 0 0 [0 0]}}
		fmt.Println("文件信息:", info)
		fmt.Println(info.IsDir()) //true
	}

	//創建文件
	filename := "test/test.txt"
	create, err := os.Create(filename)
	if err != nil {
		fmt.Println("創建文件失敗：", err)
	} else {
		fmt.Println("文件信息:", create) //文件信息: &{0xc0000ae120}
	}

	//打開文件 os.Open()只讀
	file, err := os.OpenFile(filename, os.O_RDONLY|os.O_WRONLY, os.ModePerm)
	if err != nil {
		fmt.Println("打開文件失敗：", err)
	} else {
		fmt.Println("文件信息:", file) //文件信息: &{0xc0000561e0}
	}

	//寫入文件
	data := []byte{104, 101, 108, 108, 111}
	err = ioutil.WriteFile(filename, data, fs.ModePerm)
	if err != nil {
		fmt.Println("寫入文件失敗：", err)
	}

	//讀取文件
	readFile, err := ioutil.ReadFile(filename)
	if err != nil {
		fmt.Println("讀取文件失敗：", err)
	} else {
		fmt.Println("文件信息:", string(readFile)) //文件信息: hello
	}
}
